﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SouthApps.MobileHealth.SDK.DAL.Model;
using SouthApps.MobileHealth.SDK.Cache;

namespace SouthApps.MobileHealth.SDK.DAL.DataAccess
{
    public class SucursalPrestadorDao : DataAccessObject
    {
        #region Add

        public void AddSucursalPrestador(int financiadorId, SucursalPrestador sucursalPrestador)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    entities.AddTosucursalprestador(sucursalPrestador);
                    this.SaveChanges(entities);
                    SucursalesPrestadorCache.AddSucursalPrestadorToCache(financiadorId, sucursalPrestador);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion

        #region Get

        public List<SucursalPrestador> GetSucursalesPrestador(int prestadorId)
        {
            return this.GetSucursalesPrestador(prestadorId, true);
        }

        public List<SucursalPrestador> GetSucursalesPrestador(int prestadorId, bool activo)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    var query = from e in entities.sucursalprestador
                                where e.prestadorId == prestadorId && e.activo == activo
                                select e;

                    return query.ToList();
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        public List<SucursalPrestador> GetSucursalesPrestadorFinanciador(int financiadorId)
        {
            return this.GetSucursalesPrestadorFinanciador(financiadorId, true);
        }

        public List<SucursalPrestador> GetSucursalesPrestadorFinanciador(int financiadorId, bool activo)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    var query = from e in entities.sucursalprestador.Include("Prestador").Include("Departamento.Provincia").Include("Convenio")
                                where (e.prestador.financiadorId == financiadorId && e.activo == activo)
                                select e;

                    return query.ToList();
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        public SucursalPrestador GetSucursalPrestador(int sucursalPrestadorId)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    return entities.sucursalprestador.FirstOrDefault(e =>
                        e.sucursalPrestadorId == sucursalPrestadorId);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion

        #region Modify

        public void ModifySucursalPrestador(int financiadorId, SucursalPrestador sucursalPrestador)
        {
            try
            {
                using (var entities = this.EntityContext)
                {
                    SucursalPrestador oldSucursalPrestador = entities.sucursalprestador.FirstOrDefault(e => e.sucursalPrestadorId == sucursalPrestador.sucursalPrestadorId);
                    oldSucursalPrestador = sucursalPrestador;
                    this.SaveChanges(entities);

                    SucursalesPrestadorCache.UpdateSucursalPrestadorToCache(financiadorId, sucursalPrestador);
                }
            }
            catch (Exception ex)
            {
                throw this.HandleException(ex);
            }
        }

        #endregion
    }
}
